#ifndef SRC_LINEAR_LINEAR_HMMSQ
#define SRC_LINEAR_LINEAR_HMMSQ
#include "h_mat_mul.hpp"

hmm_constant_multipler *
build_lhmmsq_constant_multipler(const helib::EncryptedArray &ea,
                                hmm_metric_collector *collector, long dim);

void lhmm_sq(hmm_metric_collector *collector, hmm_constant_multipler *cm,
             const helib::EncryptedArray &ea, helib::Ctxt &AB,
             const helib::Ctxt &A, const helib::Ctxt &B);
void lhmm_sq_mt(hmm_metric_collector *collector, hmm_constant_multipler *cm,
                int threads, const helib::EncryptedArray &ea, helib::Ctxt &AB,
                const helib::Ctxt &A, const helib::Ctxt &B);

#endif /* SRC_LINEAR_LINEAR_HMMSQ */
